'##############
'IBIS Script
'##############

'80s style IBIS (Integrated Board Information System)

'(c) 15.04.2009 Rьdiger Hьlsmann
'(c) 17.01.2011 Marcel Kuhnt

'Script Version: 1.1
'Omsi release: 1.0

'Needs:
'- Cockpit (Batterietrennschalter)
'- Door (Haltestellenbremse)

'Revision History:

'- Rьdiger Hьlsmann		05.01.2011		File created based on IBIS.osc (last revision 05.01.2011)
'- Marcel Kuhnt			07.01.2011		Don't show busstops if no route	
'- Marcel Kuhnt			17.01.2011		9xx00 => 9xx04 instead of 9xx35!
'- Rьdiger Hьlsmann		24.01.2011		Delay display on IBIS
'- Rьdiger Hьlsmann		26.01.2011		IBIS blink bug fixed, "+/- 0 min" removed
'- Rьdiger Hьlsmann		06.02.2011		Cabin-display init

'--------------------------------------------------------------------------------

'IBIS-Modi: 							Режимы ИБИСа:

'	0:	Normal/Haltestellenanzeige		0: Нормальный\Дисплей статичен
'	1:	Linie/Kurs-Eingabe				1: Ввод пути
'	2:	Routen-Eingabe					2: Ввод маршрута
'	3:	Ziel-Eingabе					3: Ввод конечной
'	4:	Error "Falsche Route"			4: Ошибка "Неверный маршрут"
'	5:	Debug: show Terminus-Matrix		5: Отладка: вывод маршрута
'	6:	Error "Falsches Ziel"			6: Ошибка: "Неверный путь"
'	7:	Debug: show Line-Matrix			7: Отладка: вывод пути
'	8:	Ziel im IBIS anzeigen			8: Вывод конечной на ИБИС
'	9:	Datum und Uhrzeit				9: Дата и время


'----------------------
'	Trigger
'----------------------

{trigger:IBIS_setmode_linie_kurs}

	(L.L.elec_busbar_main)
	{if}
		0 (S.L.IBIS_input) (S.L.IBIS_input_count)
		1 (S.L.IBIS_mode) 
		1 (S.L.informator_menu_visible)	(S.L.menu_select)	
		(T.L.ev_IBIS_piep)
	{endif}
	
{end}

{trigger:IBIS_setmode_route}

	(L.L.elec_busbar_main)
	{if}
		0 (S.L.IBIS_input) (S.L.IBIS_input_count)
		2 (S.L.IBIS_mode)
		1 (S.L.informator_menu_visible)	(S.L.menu_select)	
		(T.L.ev_IBIS_piep)
	{endif}
	
{end}

{trigger:IBIS_setmode_ziel}

	(L.L.elec_busbar_main)
	{if}
		0 (S.L.IBIS_input) (S.L.IBIS_input_count)
		3 (S.L.IBIS_mode)
		1 (S.L.informator_menu_visible)	(S.L.menu_select)	
		(T.L.ev_IBIS_piep)
	{endif}
	
{end}

'-------------------------------------------
' Кнопка подтверждения ввода
'-------------------------------------------

{trigger:IBIS_eingabe}

		(L.L.informator_menu)
		{if}
				0 (S.L.informator_menu_visible) (S.L.menu_select)
		{endif}	
		
		
		(L.L.salon_menu)
		{if}
			(L.L.menu_select_vis) 0 =
			{if}
				1 (S.L.Snd_Microphone)
			{else}				
			(L.L.menu_select_vis) 1 >=
			{if}
				1 (S.L.salon_menu1_visible)				
				{endif}
 		{endif}
		{endif}	
	
	
'***********************
' Eingabe Linie/Kurs: Ввод маршрута
'***********************
			(L.L.IBIS_mode) 1 =
			{if}
				0 (S.L.IBIS_mode)
				(T.L.ev_IBIS_piep)

' Input teilen... Вводная часть...

				(L.L.IBIS_input) s0 (S.L.IBIS_Linie_Complex)

				100 / trunc

				(S.L.IBIS_LinieKurs)

				l0 100 %

				(S.L.IBIS_Linie_Suffix)

'ANNAX-Test:
'				7 (S.L.IBIS_mode)

' Entwerter umstellen: Изменение настроек валидаторов
				(T.L.ev_IBIS_entwerter)
				(M.L.IBIS_SetComplexLineString)

			{else}
'***********************
' Eingabe Route:
'***********************
			(L.L.IBIS_mode) 2 =
			{if}
				(L.L.IBIS_input) s0 (S.L.IBIS_Route)

' Das Folgende soll kьnftig erst nach "Route" gemacht werden!
'Это должно выполнятся когда выставлен роут
				(L.L.IBIS_LinieKurs) 100 * l0 + (M.V.GetRouteIndex) s1
				0 <
				{if}
' Falls kleiner 0, also -1, dann fehlerhaft, dann nicht ьbernehmen sondern Fehlermeldung ausgeben:
'Если меньше 0 и -1, то выводит ошибку
					4 (S.L.IBIS_mode)
'		Blinker aktivieren: Мигалка активизируется
					1 (S.L.IBIS_BlinkOn) (S.L.IBIS_BlinkInitial)
					(L.S.GetTime) (S.L.IBIS_BlinkTimer)
'		Fehler-piepen Бибка ошибки
					(T.L.ev_IBIS_pieperror)
				{else}
					(T.L.ev_IBIS_piep)
					(M.L.IBIS_SetRoute)
' Bushaltestellen zurьcksetzen: Сброс остановок
					0 (S.L.IBIS_busstop)			
					(M.L.IBIS_RefreshBusstop)

'ANNAX-Test:
'					7 (S.L.IBIS_mode)

					8 (S.L.IBIS_mode)

' Entwerter umstellen: Изменение настроек валидаторов
					(T.L.ev_IBIS_entwerter)
					(L.L.IBIS_busstop_entwerter_soll) (S.L.IBIS_busstop_entwerter_ist)
				{endif}
			{else}
'***********************
' Eingabe Ziel:
'***********************
			(L.L.IBIS_mode) 3 =
			{if}
' Eingabe ist der Terminus-Code Ввод кода конечки
				(L.L.IBIS_input) (S.L.IBIS_TerminusCode)
' Daraus wird noch der Terminus-Index generiert:
				(M.V.GetTerminusIndex) s0
				0 <
				{if}
' Falls kleiner 0, also -1, dann fehlerhaft, dann nicht ьbernehmen sondern Fehlermeldung ausgeben:
					6 (S.L.IBIS_mode)
'		Blinker aktivieren:
					1 (S.L.IBIS_BlinkOn) (S.L.IBIS_BlinkInitial)
					(L.S.GetTime) (S.L.IBIS_BlinkTimer)
'		Fehler-piepen
					(T.L.ev_IBIS_pieperror)
				{else}
					8 (S.L.IBIS_mode)
					(T.L.ev_IBIS_piep)
					l0 (S.L.IBIS_TerminusIndex)
					(M.L.IBIS_RefreshTerminusText)
'ANNAX-Test:
'					5 (S.L.IBIS_mode)
				{endif}
			{else}
'***********************
' Eingabe Fehler/Debug: Ошибки/отладка
'***********************
			(L.L.IBIS_mode) 4 =
			(L.L.IBIS_mode) 5 = ||
			(L.L.IBIS_mode) 6 = ||
			(L.L.IBIS_mode) 7 = ||
			{if}
				0 (S.L.IBIS_mode)
				(T.L.ev_IBIS_piep)
			{endif}
			{endif}
			{endif}
			{endif}
		{endif}
		
		
		

				

	
{end}

{trigger:IBIS_1}
	1 (M.L.IBIS_Zahlentasten)
{end}


{trigger:IBIS_2}
	2 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_3}
	3 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_4}
	4 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_5}
	5 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_6}
	6 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_7}
	7 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_8}
	8 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_9}
	9 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_0}
	0 (M.L.IBIS_Zahlentasten)
{end}

{trigger:IBIS_loeschen}
	
	(L.L.elec_busbar_main)
	{if}
		(T.L.ev_IBIS_piep)
		0 (S.L.IBIS_mode)
        0 (S.L.informator_menu_visible)				
		0 (S.L.salon_menu1_visible)	
	{endif}
	
	(L.L.informator_menu)
	{if}		
		0 (S.L.menu_select)			
	{endif}	
{end}

'Объявитель остановок
{trigger:IBIS_vor}
	(L.L.elec_busbar_main) (L.L.IBIS_mode) s0 0 = l0 8 = || &&
	{if}
		(L.L.IBIS_busstop) 1 + (S.L.IBIS_busstop)
		(M.L.IBIS_RefreshBusstop)
		(T.L.ev_IBIS_piep)
		"Ansagen\" (L.$.IBIS_busstop_name) $+ ".wav" $+
		(T.F.ev_IBIS_Ansagen)
'		Nullsetzen des Timers fьr den Zeilenwechsel der LCD-Innenanzeige
		0 (S.L.IBIS_LCD-zeilentimer) (S.L.IBIS_LCD-zeile)
		(M.L.IBIS_LCD-refresh)
	{endif}
{end}

{trigger:IBIS_vor_stumm}
	(L.L.elec_busbar_main) (L.L.IBIS_mode) s0 0 = l0 8 = || &&
	{if}
		(L.L.IBIS_busstop) 1 + (S.L.IBIS_busstop)
		(M.L.IBIS_RefreshBusstop)
		(T.L.ev_IBIS_piep)
'		Nullsetzen des Timers fьr den Zeilenwechsel der LCD-Innenanzeige
		0 (S.L.IBIS_LCD-zeilentimer) (S.L.IBIS_LCD-zeile)
		(M.L.IBIS_LCD-refresh)
	{endif}
{end}

{trigger:IBIS_rueck}
	(L.L.elec_busbar_main) (L.L.IBIS_mode) s0 0 = l0 8 = || &&
	{if}
		(L.L.IBIS_busstop) 0 > &&
		{if}
			(L.L.IBIS_busstop) 1 - (S.L.IBIS_busstop)
			(M.L.IBIS_RefreshBusstop)
'			Nullsetzen des Timers fьr den Zeilenwechsel der LCD-Innenanzeige
			0 (S.L.IBIS_LCD-zeilentimer) (S.L.IBIS_LCD-zeile)
			(M.L.IBIS_LCD-refresh)
		{endif}
		(T.L.ev_IBIS_piep)

	{endif}
{end}



'----------------------
'	Init
'----------------------

{macro:IBIS_init}
	"     " (S.$.IBIS_Complex_Line)
	-1 (S.L.IBIS_RouteIndex)

{end}


'----------------------
'	Frame
'----------------------

{macro:IBIS_frame}
	


	(L.L.elec_busbar_main)
	{if}

'----------------
'Anfangsmelodie Мелодия включения
		(L.L.IBIS_energy_last) !
		{if}
'			(T.L.ev_IBIS-startupsound)
			0 (S.L.IBIS_mode)
		{endif}

'----------------
'Blinker laufen lassen: Индикатор запуска

		(L.L.IBIS_BlinkTimer) s0 0 <
		{if}
			(L.S.GetTime) (S.L.IBIS_BlinkTimer) s0
		{endif}

' Wenn Zeit abgelaufen: По истечении времени
		(L.S.GetTime) l0 - s0
		1.2 > (L.L.IBIS_BlinkInitial) && l0 0.833 > ||
		{if}
			(L.L.IBIS_BlinkOn) ! (S.L.IBIS_BlinkOn)
			0 (S.L.IBIS_BlinkInitial)
			(L.S.GetTime) (S.L.IBIS_BlinkTimer)
		{endif}



'----------------
'Entwerter-Weiterschaltung: Валидаторная хрень
		(L.L.IBIS_busstop_entwerter_ist) (L.L.IBIS_busstop_entwerter_soll) = ! (L.L.bremse_halte) &&
		{if}
			(L.L.IBIS_busstop_entwerter_soll) (S.L.IBIS_busstop_entwerter_ist)
			(T.L.ev_IBIS_entwerter_weiter)
		{endif}
		
'----------------
'Display-Darstellung: Отображение на дисплее

        (L.L.informator_menu_visible)		
		(L.L.IBIS_mode) 1 = &&
		{if}
			"Вво$ маршрута : "
			(L.L.IBIS_input_count) 0 =
			{if}
				(L.$.IBIS_Complex_Line) $+
			{else}
				" " 5 (L.L.IBIS_input_count) - $* $+ (L.L.IBIS_input) "0" (L.L.IBIS_input_count) $IntToStr $+ $IntToStrEnh $+ 
			{endif}
		{else}
        (L.L.informator_menu_visible)		
		(L.L.IBIS_mode) 2 = &&
		{if}
			"Вво$ ко$а рейса : " " " 2 (L.L.IBIS_input_count) - $* $+ (L.L.IBIS_input) "0" (L.L.IBIS_input_count) $IntToStr $+ $IntToStrEnh $+ 
		{else}
        (L.L.informator_menu_visible)		
		(L.L.IBIS_mode) 3 = &&
		{if}
			"Вво$ рейса : " " " 3 (L.L.IBIS_input_count) - $* $+ (L.L.IBIS_input) "0" (L.L.IBIS_input_count) $IntToStr $+ $IntToStrEnh $+ 
		{else}
		(L.L.IBIS_mode) 4 =
		(L.L.IBIS_mode) 6 = ||		
		{if}
			(L.L.IBIS_BlinkOn)
			{if}
				"Ошибка, повторите вво$ "
			{else}
				""			
			{endif}		
		{else}
'Testweise den Inhalt der Annax anzeigen: Просмотр содержимого ЭМУ
'		(L.L.IBIS_mode) 5 =
'		{if}
'			(L.$.Matrix_Right)
'		{else}
'Testweise den Inhalt der Linien-Annax anzeigen:
'		(L.L.IBIS_mode) 7 =
'		{if}
'			"--" (L.$.Matrix_Nr) $+ "--" $+ 12 $SetLengthL 16 $SetLengthR
'		{else}
'Anzeigen des Zielschild-Textes auf dem IBIS: Просмотр имени конечной при запуске ибиса
		(L.L.IBIS_mode) 8 =
		{if}
			(L.$.IBIS_terminus_name) 20 $SetLengthL


'####################################
' RBL-TESTS
'####################################
'Zielschildautomatik:

'		(M.V.GetTTTerminusIndex) (S.L.IBIS_TerminusIndex)
'		(M.V.GetTTLineString) 3 $SetLengthL (S.$.Matrix_Nr) 3 $SetLengthL 20 $SetLengthL

'Verspдtung anzeigen:
'
'		"Verspдtung: "
'		(M.V.GetTTDelay) 60 / s0
'		0 <
'		{if}
'			"-" $+ l0 /-/ s0
'		{else}
'			" " $+
'		{endif}
'		Minuten:
'			l0 trunc s1 "02" $IntToStrEnh $+ ":" $+
'		Sekunden:
'			l0 l1 - 60 * trunc "02" $IntToStrEnh $+
'
'Haltestellenname/-zeit anzeigen:
'		(M.V.GetTTBusstopIndex) s2 (M.V.GetTTBusstopName)
'		""
'		Stunden:
'			l2 (M.V.GetTTBusstopArr) 3600 / s0 trunc s1 "02" $IntToStrEnh $+ ":" $+
'		Minuten:
'			l0 l1 - 60 * trunc "02" $IntToStrEnh $+
'		" / " $+
'		Stunden:
'			l2 (M.V.GetTTBusstopDep) 3600 / s0 trunc s1 "02" $IntToStrEnh $+ ":" $+
'		Minuten:
'			l0 l1 - 60 * trunc "02" $IntToStrEnh $+
'
'####################################
' Ende RBL-TESTS
'####################################


			20 $SetLengthL
		{else}
			(L.$.IBIS_busstop_name) 20 $SetLengthL
		{endif}
		{endif}
'		{endif}
'		{endif}
		{endif}
		{endif}
		{endif}
		{endif}
		{endif}

		"@" $+	

'Linie/Kurs:
		(L.$.Matrix_Nr) $+ " " $+
		"  " $+		
'Terminus:
		(L.L.IBIS_TerminusCode) "03" $IntToStrEnh $+
		"  " $+			
'Route:
		(L.L.IBIS_Route) "02" $IntToStrEnh $+ " " $+

	{else}
		"" (S.$.IBIS) (S.$.IBIS_cabindisplay)
	{endif}

	(S.$.IBIS)




'Anzeigen der aktuellen Fahrplanlage: Просмотр текущего месторасположения по графику





'Omsi sagen, dass die Strings-Ausgaben aktualisiert werden sollen: 
	1 (S.L.Refresh_Strings)


'----------------
'Microphon-Taster: Кнопка микрофона
	(L.L.Snd_Microphone) (L.L.IBIS_LastMicro) ! &&
	{if}
		(L.L.IBIS_busstop) 1 + (S.L.IBIS_busstop)
		(M.L.IBIS_RefreshBusstop)
		"Ansagen\" (L.$.IBIS_busstop_name) $+ ".wav" $+
		(T.F.ev_IBIS_Ansagen)
'		Nullsetzen des Timers fьr den Zeilenwechsel der LCD-Innenanzeige обнуление таймера
		0 (S.L.IBIS_LCD-zeilentimer) (S.L.IBIS_LCD-zeile)
		(M.L.IBIS_LCD-refresh)
	{endif}
	(L.L.Snd_Microphone) (S.L.IBIS_LastMicro)

'----------------
'Last energy:
	(L.L.elec_busbar_main) (S.L.IBIS_energy_last)

'----------------
'LCD-Anzeigetimer hochlaufen lassen
	(L.L.IBIS_LCD-zeilentimer) (L.S.Timegap) + (S.L.IBIS_LCD-zeilentimer)
	4 >
	(L.L.elec_busbar_main) &&
	{if}
		(L.L.IBIS_LCD-zeile) ! (S.L.IBIS_LCD-zeile)
		0 (S.L.IBIS_LCD-zeilentimer)
		(M.L.IBIS_LCD-refresh)
	{endif}

'	1 s6
'	(L.L.target_index_int)
'	"..\..\Anzeigen\Rollband_5299\" 
'	trunc 4 (M.V.GetTerminusString) 
'	$IntToStr
'	$+
'	(S.$.Rollband_Tex_V)
	
	(L.L.target_index_int) 1 +
	"..\..\Anzeigen\Rollband_5299\" 
	trunc 4 (M.V.GetTerminusString) 
	$+
	(S.$.Rollband_Tex_H)

{end}

'----------------------
'	Macros
'----------------------

{macro:IBIS_RefreshBusstop}

	(L.L.IBIS_RouteIndex) 0 <
	{if}
		"" (S.$.act_busstop)
	{else}
	(L.L.IBIS_RouteIndex) (M.V.GetBusstopCount) (L.L.IBIS_busstop) <=
	{if}
'Wenn der Bushaltestellenindex grцЯer oder gleich der Anzahl ist und somit zu groЯ (der Bushaltestellenindex ist wie alle Indizes nullbasiert), 
'dann wechsele automatisch auf die Gegenroute, sofern der Index 01 oder 02 ist und der jeweilige andere Index existiert. Sonst belasse die Route.
		0 (S.L.IBIS_busstop)
		1 + (S.L.IBIS_busstop_next)
		
' Entwerter umstellen:
		(T.L.ev_IBIS_entwerter)
		(L.L.IBIS_busstop_entwerter_soll) (S.L.IBIS_busstop_entwerter_ist)

		(L.L.IBIS_Route) s5
		2 % 0.5 >
		{if}
			l5 1 + s6
		{else}
			l5 1 - s6
		{endif}

'Suche den Routeindex:

		(L.L.IBIS_LinieKurs) 100 * l6 + (M.V.GetRouteIndex) s1
		0 >=
		{if}
'Wenn gьltig, dann wechsele:
			(M.L.IBIS_SetRoute)
			l6 (S.L.IBIS_Route)
		{endif}
	{else}
		0 (S.L.IBIS_mode)
	{endif}
	{endif}

'Setzen der String-Variable "act_busstop" fьr die OMSI-interne Berechnung und daraus Ableitung des "globalen" Haltestellenindexes:

	(L.L.IBIS_RouteIndex) (L.L.IBIS_busstop) (M.V.GetRouteBusstopIdent) 
 	(S.$.act_busstop)
	(M.V.GetBusstopIndex) (S.L.IBIS_busstop_index)
	
'Sonst zeige die Bushaltestelle
	(S.L.IBIS_busstop_index) 3 (M.V.GetBusstopString)
	(S.$.IBIS_busstop_name)
	
	(L.L.IBIS_busstop) 1 + (S.L.IBIS_busstop_next)
	
	(L.L.IBIS_RouteIndex) (M.V.GetBusstopCount) (L.L.IBIS_busstop) 1 + <=
	{if}
		0 (S.L.IBIS_busstop_index_next)
	{else}
		(L.L.IBIS_RouteIndex) (L.L.IBIS_busstop_next) (M.V.GetRouteBusstopIdent)
		(M.V.GetBusstopIndex) (S.L.IBIS_busstop_index_next)
	{endif}
	
	(S.L.IBIS_busstop_index_next) 3 (M.V.GetBusstopString)
	(S.$.IBIS_busstop_name_next)
	

'Ausrechnen der neuen Entwerterposition:
	(L.L.IBIS_busstop_offset) (L.L.IBIS_busstop) + (S.L.IBIS_busstop_entwerter_soll)


{end}

{macro:IBIS_LCD-refresh}

'Formatierung der D92-Innenanzeige

	(L.L.IBIS_LCD-zeile) 1 = 
	(L.L.IBIS_busstop_index) 2 (M.V.GetBusstopString) $length 0 > &&
	{if}
		(L.L.IBIS_RouteIndex) 0 >=
		{if}
			(L.L.IBIS_LCD-zeile) 
			(L.L.IBIS_busstop_index) 2 (M.V.GetBusstopString)
			(S.$.IBIS_cabindisplay)
		{endif}
	{else}
		(L.L.IBIS_RouteIndex) 0 >=
		{if}
			(L.L.IBIS_LCD-zeile) 
			(L.L.IBIS_busstop_index) 1 (M.V.GetBusstopString) 
			(S.$.IBIS_cabindisplay)
		{endif}
	{endif}
{end}



{macro:IBIS_Zahlentasten}
	s0
	(L.L.elec_busbar_main)
	{if}
		(L.L.IBIS_mode) 1 = (L.L.IBIS_input_count) 5 < &&
		(L.L.IBIS_mode) 2 = (L.L.IBIS_input_count) 2 < && ||
		(L.L.IBIS_mode) 3 = (L.L.IBIS_input_count) 3 < && ||
		{if}
			(L.L.IBIS_input) 10 * l0 + (S.L.IBIS_input)
			(L.L.IBIS_input_count) 1 + (S.L.IBIS_input_count)
			(T.L.ev_IBIS_piep)
		{else}
			l0 0 =
			{if}
				9 (S.L.IBIS_mode)
				(T.L.ev_IBIS_piep)
			{endif}
		{endif}
	{endif}
{end}

{macro:IBIS_SetRoute}

' Macro setzt den Routeindex auf den Wert von l1 und fьhrt die nцtigen Schritte aus

' Wenn gьltig, dann ьbernehmen:
	l1 (S.L.IBIS_RouteIndex)
' Finden des zugehцrigen Ziel-Index':
	(M.V.GetRouteTerminusIndex) (S.L.IBIS_TerminusIndex)
' Finden des zugehцrigen Ziel-Codes:
	(M.V.GetTerminusCode) (S.L.IBIS_TerminusCode)
' Aktualisieren des Zielschild-Textes:
	(M.L.IBIS_RefreshTerminusText)
' Ziel anzeigen:
	8 (S.L.IBIS_mode)

' Falls es entweder ein 500, ein 800 oder 900-Code ist, dann bitte beim Complex-Code eine 28 (M), eine 36 (X) bzw. 04 (N) verwenden:
	(L.L.IBIS_LinieKurs) s2 100 / trunc s3
	l3 5 =
	{if}
		l2 100 * 28 (S.L.IBIS_Linie_Suffix) + (S.L.IBIS_Linie_Complex)
	{endif}
	l3 8 =
	{if}
		l2 100 * 36 (S.L.IBIS_Linie_Suffix) + (S.L.IBIS_Linie_Complex)
	{endif}
	l3 9 =
	{if}
		l2 100 * 04 (S.L.IBIS_Linie_Suffix) + (S.L.IBIS_Linie_Complex)
	{endif}
	(M.L.IBIS_SetComplexLineString)

' Entwerter-Busstop-Offset festlegen (pseudo-Zufall aus Linien-Code und Route-Index):

	(L.L.IBIS_LinieKurs) 100 * (L.L.IBIS_RouteIndex) + 10000 * sin 10 * 15 + trunc (S.L.IBIS_busstop_offset)

{end}

{macro:IBIS_RefreshTerminusText}
	(L.L.IBIS_TerminusIndex) 5 (M.V.GetTerminusString) (S.$.IBIS_terminus_name)
{end}

{macro:IBIS_SetComplexLineString}
'Linie/Kurs:
	(L.L.IBIS_LinieKurs) s0 0 = !
	{if}
		l0 "03" $IntToStrEnh
	{else}
		"   "
	{endif}
'Linien-Suffix:
	(L.L.IBIS_Linie_Suffix) s0 0 = !
	{if}
		l0 "02" $IntToStrEnh $+
	{else}
		"  " $+
	{endif}
	(S.$.IBIS_Complex_Line)
{end}

